// ================== 函数的柯理化 柯理化函数 ================= //

// 柯理化的概念:  如果一个函数有多个参数, 我们可以根据参数的个数,转换成 n 个函数.  柯理化我们一般都认为参数是一个一个的传递的.

// 偏函数: 根据参数的个数,  分解成函数, 每次调用函数的参数个数, 可以不是一个.

// 如果我们想暂存参数,可以考虑使用柯理化. 柯理化就算是一个闭包函数.(一个更加具体的函数 )

/** ********************************************
 * 判断一个变量的类型的方式
 * 1. typeof  没法区分对象类型.  数组, object
 * 2. Object.prototype.toString.call()
 * 3. instanceof
 * 4. constructor
 */
// function isType(val, type) {
//   // console.log(Object.prototype.toString.call(val))
//   return Object.prototype.toString.call(val) === `[object ${type}]`
// }
function isType(type) {
  return function (value) {
    return Object.prototype.toString.call(value) === `[object ${type}]`
  }
}

let isString = isType("String");
let isNumber = isType("Number");
let isBoolean = isType("Boolean");

console.log(isString("abc", "String"));
console.log(isNumber(12, "Number"));
console.log(isBoolean(234, "Boolean"));


// 实现一个通用的 柯理化函数  开发中经常使用的, 面试中经常会被问到.

function sum(a, b, c, d) {
  return a + b + c + d;
}

// sum(1,2,3,4)
// curringSum(sum)(1)(2,3)(4)

// 该看day01.视频3 了
